import os
import argparse

# python split_by_blank_lines.py -f processed_11.txt -p p

def split_txt_by_blank_lines(input_file, output_dir=None, prefix="part"):
    """
    将文本文件按空行分割成多个文件
    
    参数:
    input_file: 输入的txt文件路径
    output_dir: 输出目录，默认为输入文件所在目录
    prefix: 输出文件的前缀，默认为"part"
    """
    # 确定输出目录
    if output_dir is None:
        output_dir = os.path.dirname(input_file)
        if not output_dir:  # 如果输入文件在当前目录
            output_dir = "."
    
    # 创建输出目录（如果不存在）
    os.makedirs(output_dir, exist_ok=True)
    
    # 读取输入文件内容
    try:
        with open(input_file, 'r', encoding='utf-8') as f:
            lines = f.readlines()
    except UnicodeDecodeError:
        print(f"错误：文件 {input_file} 不是UTF-8编码，请转换编码后重试")
        return
    except Exception as e:
        print(f"读取文件时出错：{str(e)}")
        return
    
    # 按空行分割内容
    parts = []
    current_part = []
    
    for line in lines:
        # 判断是否为空行（考虑可能包含空格或制表符的情况）
        stripped_line = line.strip()
        if not stripped_line:
            if current_part:  # 如果当前部分不为空，则结束当前部分
                parts.append(''.join(current_part))
                current_part = []
        else:
            current_part.append(line)
    
    # 添加最后一个部分（如果不为空）
    if current_part:
        parts.append(''.join(current_part))
    
    # 保存分割后的文件
    if not parts:
        print("没有可分割的内容")
        return
    
    # 获取输入文件名（不含扩展名）用于生成输出文件名
    input_filename = os.path.splitext(os.path.basename(input_file))[0]
    
    # 保存每个部分
    for i, part in enumerate(parts, 1):
        # 生成输出文件名：前缀_原文件名_序号.txt
        output_filename = f"{prefix}_{i}.txt"
        output_path = os.path.join(output_dir, output_filename)
        
        try:
            with open(output_path, 'w', encoding='utf-8') as f:
                f.write(part)
            print(f"已生成：{output_path}")
        except Exception as e:
            print(f"写入文件 {output_path} 时出错：{str(e)}")
    
    print(f"分割完成，共生成 {len(parts)} 个文件")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='按空行分割文本文件')
    parser.add_argument('-f', '--file', required=True, help='输入的txt文件路径')
    parser.add_argument('-o', '--output-dir', help='输出目录，默认为输入文件所在目录')
    parser.add_argument('-p', '--prefix', default='part', help='输出文件前缀，默认为"part"')
    
    args = parser.parse_args()
    
    split_txt_by_blank_lines(
        input_file=args.file,
        output_dir=args.output_dir,
        prefix=args.prefix
    )